#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
给定一个经过编码的字符串，返回它解码后的字符串。
编码规则为: k[encoded_string]，表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
你可以认为输入字符串总是有效的；输入字符串中没有额外的空格，且输入的方括号总是符合格式要求的。
此外，你可以认为原始数据不包含数字，所有的数字只表示重复的次数 k ，例如不会出现像 3a 或 2[4] 的输入。
示例:
s = "3[a]2[bc]", 返回 "aaabcbc".
s = "3[a2[c]]", 返回 "accaccacc".
s = "2[abc]3[cd]ef", 返回 "abcabccdcdcdef"
"""


class Decoder:
    def __init__(self, encode: str):
        self.encode = encode

    def decode(self):
        formula = []
        *_font_char, tail = self.encode.rpartition(']')

        font_chars = ''.join(_font_char)
        for c in font_chars:
            if c.isdigit():
                formula.append('+')
                formula.append(c)
            elif c == '[':
                formula.append('*(')
            elif c == ']':
                formula.append(')')
            else:
                formula.append("'")
                formula.append(c)
                formula.append("'")

        formula_str = ''.join(formula[1:])
        if tail:
            formula_str = "{}+'{}'".format(formula_str, tail)
        print(formula_str)
        return eval(formula_str)


d = Decoder("2[abc]3[cd]ef")  # 2*('a''b''c')+3*('c''d')+'ef'
# d = Decoder("2[a2[c]]")  # 2*('a'+2*('c'))
d.decode()

# 正则试试？